﻿using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using System.ServiceModel.DomainServices.Server;

namespace IssueVision.Data.Web
{
    /// <summary>
    /// PasswordRestUser derives from User class and
    /// only exposes the following four data members to the client:
    /// Name, NewPassword, PasswordQuestion, and PasswordAnswer
    /// </summary>
    [DataContractAttribute(IsReference = true)]
    [MetadataTypeAttribute(typeof(PasswordResetUser.PasswordResetUserMetadata))]
    public sealed class PasswordResetUser : User
    {
        // This class allows you to attach custom attributes to properties
        // of the PasswordResetUser class.
        //
        // For example, the following marks the Xyz property as a
        // required field and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz;
        internal sealed class PasswordResetUserMetadata : UserMetadata
        {
            // Metadata classes are not meant to be instantiated.
            private PasswordResetUserMetadata()
            {
            }

            [Key]
            [Display(Name = "UserNameLabel", ResourceType = typeof(IssueVisionResources))]
            [Required(ErrorMessageResourceName = "ValidationErrorRequiredField", ErrorMessageResourceType = typeof(ErrorResources))]
            [RegularExpression("^[a-zA-Z0-9_]*$", ErrorMessageResourceName = "ValidationErrorInvalidUserName", ErrorMessageResourceType = typeof(ErrorResources))]
            public new string Name { get; set; }

            [DataMember]
            [Display(Name = "SecurityQuestionLabel", ResourceType = typeof(IssueVisionResources))]
            public string PasswordQuestion { get; set; }

            [Exclude]
            public new string Email { get; set; }

            [Exclude]
            public string FirstName { get; set; }

            [Exclude]
            public string LastName { get; set; }

            [Exclude]
            public string Password { get; set; }

            [Exclude]
            public string UserType { get; set; }

            [Exclude]
            public bool IsUserMaintenance { get; set; }

            [Exclude]
            public bool ProfileResetFlag { get; set; }
        }
    }
}
